package alvarodelrosal.chat.client.gui;

import alvarodelrosal.chat.client.chataction.remote.ChatLogin;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;
import javax.swing.*;

public class VentanaDeLogin extends Ventana {

    private static JFrame ventanaDeLogin;
    private JTextField campoUsuario;
    private JTextField campoClave;

    public VentanaDeLogin() {
        ventanaDeLogin = null;
    }

    public void crear() {
        if (laVentanaNoExiste()) {
            ventanaDeLogin = new JFrame();

            parametrosDeVentana();

            JLabel etiquetaUsuario = crearEtiqueta("Nombre de usuario:", 1);
            ventanaDeLogin.add(etiquetaUsuario);
            campoUsuario = crearCampo(1);
            ventanaDeLogin.add(campoUsuario);

            JLabel etiquetaClave = crearEtiqueta("Contraseña:", 2);
            ventanaDeLogin.add(etiquetaClave);
            campoClave = crearCampoClave(2);
            ventanaDeLogin.add(campoClave);

            JLabel linkNuevoUsuario = new JLabel("¿Aun sin cuenta?", JLabel.CENTER);
            linkNuevoUsuario.setBounds(105, 130, 130, 30);
            linkNuevoUsuario.setCursor(new Cursor(Cursor.HAND_CURSOR));
            linkNuevoUsuario.setForeground(Color.BLUE);
            linkNuevoUsuario.addMouseListener(new MouseListener() {

                @Override
                public void mouseClicked(MouseEvent me) {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            new VentanaDeRegistro().crear();
                        }
                    });
                }

                @Override
                public void mousePressed(MouseEvent me) {
                }

                @Override
                public void mouseReleased(MouseEvent me) {
                }

                @Override
                public void mouseEntered(MouseEvent me) {
                }

                @Override
                public void mouseExited(MouseEvent me) {
                }
            });
            ventanaDeLogin.add(linkNuevoUsuario);

            ventanaDeLogin.add(botonDeConectar());

            ventanaDeLogin.add(botonDeSalir());

            ventanaDeLogin.setResizable(false);

        }
        ventanaDeLogin.setVisible(true);
    }

    private JButton botonDeConectar() {
        ImageIcon iconoCandado = new ImageIcon(getClass().getResource("/iconos/lock.png"));

        JButton conectar = new JButton("Conectar", iconoCandado);
        conectar.setBounds(170, 160, 100, 30);
        ventanaDeLogin.getRootPane().setDefaultButton(conectar);
        conectar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                ChatLogin login = new ChatLogin();
                List<String> parameters = login.convertToParameters(campoUsuario.getText(),
                        campoClave.getText());
                login.doAction(parameters);

            }
        });
        return conectar;
    }

    private JButton botonDeSalir() {
        ImageIcon iconoSalir = new ImageIcon(getClass().getResource("/iconos/door-open.png"));

        JButton salir = new JButton("Salir", iconoSalir);
        salir.setBounds(60, 160, 100, 30);
        salir.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        return salir;
    }

    private boolean laVentanaNoExiste() {
        return ventanaDeLogin == null;
    }

    private void parametrosDeVentana() throws HeadlessException {
        ventanaDeLogin.setTitle("Iniciar sesión");
        ventanaDeLogin.setSize(340, 230);
        ventanaDeLogin.setResizable(false);

        Toolkit toolkit = ventanaDeLogin.getToolkit();
        Dimension size = toolkit.getScreenSize();
        ventanaDeLogin.setLocation((size.width - ventanaDeLogin.getWidth()) / 2,
                (size.height - ventanaDeLogin.getHeight()) / 2);
        ventanaDeLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ventanaDeLogin.setLayout(null);
    }

    private JLabel crearEtiqueta(String nombre, int posicion) {
        JLabel etiqueta = new JLabel(nombre);
        etiqueta.setBounds(20, 10 + 30 * posicion, 130, 30);
        etiqueta.setHorizontalAlignment(JLabel.RIGHT);
        return etiqueta;
    }

    private JTextField crearCampo(int posicion) {
        JTextField campo = new JTextField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }

    private JPasswordField crearCampoClave(int posicion) {
        JPasswordField campo = new JPasswordField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }
    
    public static void hacerInvisible() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ventanaDeLogin.setVisible(false);
            }
        });
    }
}
